package funtools.java;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileSystemView;
import java.io.File;
import java.util.Arrays;
import java.util.Locale;

/**
 * @author LiangMu
 * @version \$Id: FilesUtil.java, v 0.1, 2023年04月27日 10:25 LiangMu Exp $$
 */
public class FilesUtil {
    public static final int FILES_ONLY            = 0;
    public static final int DIRECTORIES_ONLY      = 1;
    public static final int FILES_AND_DIRECTORIES = 2;

    /**
     * 读取系统文件系统的文件
     *
     * @param chooseMode 选择模式
     * @param fileType   文件类型，例如 properties, xlsx 等等, 可选类型 { FilesUtil.FILES_ONLY, FilesUtil.DIRECTORIES_ONLY, FilesUtil.FILES_AND_DIRECTORIES }
     * @return 返回所选文件 array
     */
    public static File[] chooseFile(int chooseMode, String... fileType) {
        // 拿到文件系统
        FileSystemView fsv = FileSystemView.getFileSystemView();
        // 修改为英文
        JFileChooser.setDefaultLocale(Locale.US);
        // 实例化
        JFileChooser fileChooser = new JFileChooser();
        // 设置当前工作目录为桌面
        fileChooser.setCurrentDirectory(fsv.getHomeDirectory());
        // 设置标头
        fileChooser.setDialogTitle("select");
        // 设置文件选择类型
        fileChooser.setFileSelectionMode(chooseMode);
        // 设置多文件选择模式
        fileChooser.setMultiSelectionEnabled(true);
        // 移除所有文件过滤模式
        fileChooser.removeChoosableFileFilter(fileChooser.getAcceptAllFileFilter());
        // 设置过滤器
        FileNameExtensionFilter filter = new FileNameExtensionFilter("all", fileType);
        // 添加文件过滤
        fileChooser.setFileFilter(filter);
        // 不隐藏不符合条件的文件
        fileChooser.setFileHidingEnabled(Boolean.FALSE);
        // 拿到操作结果
        int result = fileChooser.showOpenDialog(null);
        // 判断操作结果
        if (result == JFileChooser.APPROVE_OPTION) {
            File[] files = fileChooser.getSelectedFiles();
            System.out.println(Arrays.toString(Arrays.stream(files).map(File::getName).distinct().toArray()));
            return files;
        } else {
            return new File[0];
        }
    }

}
